Many types of electronic devices require that information be loaded from a source and stored in a memory. For example, programmable logic devices are configured to implement a desired logical function based upon configuration data provided by a programming tool. The configuration data may be stored internally for a non-volatile device or externally for a volatile device. Regardless of whether the configuration data is stored internally or externally, the increasing complexity of programmable logic devices requires larger and larger amounts of configuration data. This increased configuration data size produces delays in the configuration process and increases the costs.
During the configuration process, the configuration data is typically loaded from a source such as an EEPROM into a programmable logic device responsive to cycles of a clock signal. To reduce the storage requirement for the EEPROM, the configuration data may be compressed. In addition, the compression of the configuration data decreases the amount of time needed to configure the corresponding programmable logic device. Because a programmable logic device is very sensitive to errors in the configuration data stream, any compression of the data must be lossless or perfect such that the decompressed configuration data is exactly the same as the configuration data before compression. In addition, only a portion of the configuration data can generally be compressed in light of the requirement for perfect compression. Thus, the configuration data being shifted into the device will comprise both uncompressed and compressed data. This mixed nature of the configuration data complicates the configuration data flow. Any compressed configuration data must be decompressed before configuration may be completed. However, the configuration data is being shifted at a constant rate responsive to cycles of the clock signal. When data is decompressed, this constant rate must necessarily change. This adds complexity to the configuration process because it must accommodate the rate changes depending upon whether configuration data being shifted in was compressed or not. This accommodation may take place in the programming tool providing the bit stream or may take place within the device. Regardless of where the accommodation takes place, it adds considerable complexity to the configuration circuitry and the software controlling the configuration process. Moreover, this complexity inherently limits the bit rate of the configuration data stream. As a result of this complexity, comparatively few programmable devices utilize configuration data compression, particularly in low-cost devices.
Accordingly, there is a need in the art for improved decompression techniques for data streams.